﻿using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.AspNetCore.Mvc;
using Zwt.System.Model;

namespace Zwt.System.Host.Global
{
    /// <summary>
    /// IActionFilter 接口定义了在执行操作方法之前和之后执行的方法
    /// </summary>
    public class GlobalActionMonitor : Attribute, IActionFilter
    {
        public GlobalActionMonitor()
        {
        }

        /// <summary>
        /// 方法用于在执行操作方法之后执行代码
        /// </summary>
        /// <param name="context"></param>
        public void OnActionExecuted(ActionExecutedContext context)
        {
        }

        /// <summary>
        /// 方法用于在执行操作方法之前执行代码
        /// </summary>
        /// <param name="context"></param>
        public void OnActionExecuting(ActionExecutingContext context)
        {
            #region 模型验证
            // 判断模型验证是否通过
            if (context.ModelState.IsValid) return;
            // 未通过，创建一个 ApiResult 对象，并将其设置为 JsonResult，以便将错误消息返回给客户端
            ApiResult response = new ApiResult();
            response.StatusCode = (int)StatusCodeType.ParameterError;

            foreach (var item in context.ModelState.Values)
            {
                foreach (var error in item.Errors)
                {
                    if (!string.IsNullOrEmpty(response.Message))
                    {
                        response.Message += " | ";
                    }

                    response.Message += error.ErrorMessage;
                }
            }

            context.Result = new JsonResult(response);
            #endregion
        }
    }
}
